////////////////////////////////////////////////////////////////////
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//         佛祖保佑          永无BUG         永不修改              //
////////////////////////////////////////////////////////////////////
package com.financial.sys.task;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.financial.model.pojo.TBid;
import com.financial.model.pojo.TBorrow;
import com.financial.model.pojo.TUserWallet;
import com.financial.sys.mapper.bid.TBidMapper;
import com.financial.sys.mapper.borrow.TUserWalletMapper;
import com.financial.sys.service.borrow.TBorrowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

import java.util.Date;
import java.util.List;

/**
 * @author: 周未
 * @Description:
 * @create 10:53 2020/2/17
 */
@Configuration
@EnableScheduling
public class CheckBidDateTask {

	@Autowired
    TBorrowService tBorrowService;
	@Autowired
	TUserWalletMapper tUserWalletMapper;
	@Autowired
	TBidMapper tBidMapper;

	//每30秒检查当前系统时间，是否超过借款标的截止时间。
	// 如果超过标的的招标截止时间，就会进入流标流程。
	// 当前借款标状态修改为'流标'。
	@Scheduled (fixedRate = 30000)
	private void configureTasks() {
		Date date = new Date();
		QueryWrapper query = new QueryWrapper();
		query.eq("borrow_state", 20);
		List<TBorrow> borrowList = tBorrowService.list(query);
		for (TBorrow tBorrow : borrowList
		) {
			//借款id
			String borrowId = tBorrow.getId();
			//借款人id
			String userId = tBorrow.getBorrowUserId();
			//借款额度
			Long borrowAmount = tBorrow.getBorrowAmount();
			//投标截至时间
			Date bidDeadline = tBorrow.getBidDeadline();
			if (date.compareTo(bidDeadline) >= 0) {
				//流标
				tBorrow.setBorrowState(21);
				tBorrowService.updateById(tBorrow);

				//该标的的投资人的钱依次退回给各位投资人.
				QueryWrapper queryWrapper = new QueryWrapper();
				queryWrapper.eq("borrow_id", borrowId);
				List<TBid> bidList = tBidMapper.selectList(queryWrapper);
				for (TBid bid : bidList
				) {
					bid.setBorrowState(21);
					tBidMapper.updateById(bid);
					//投标人
					String bidUserId = bid.getBidUserId();
					//投标金额
					Long bidAmount = bid.getBidAmount();
					//退回资金
					TUserWallet tUserWallet = tUserWalletMapper.selectById(bidUserId);
					tUserWallet.setAvailableAmount(tUserWallet.getAvailableAmount() + bidAmount);
					tUserWallet.setFreezeAmount(tUserWallet.getFreezeAmount() - bidAmount);
					tUserWalletMapper.updateById(tUserWallet);
				}
				//返回授信额度给借款人
				TUserWallet tUserWallet = tUserWalletMapper.selectById(userId);
				tUserWallet.setResidualCreditLine(tUserWallet.getResidualCreditLine() + borrowAmount);
				tUserWalletMapper.updateById(tUserWallet);
			}
		}

	}
}
